package org.example.ch05.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @ClassName OrderConsumber
 * @Description TODO
 * @Author Kx
 * @Date 2025/10/11 15:22
 * @Version 1.0
 */
@Service
@Slf4j
public class OrderConsumerService {
    /**
     * 使用 @RabbitListener 注解进行监听， queues属性指定要监听的队列名称
    */
    /*@RabbitListener(queues = RabbitConfig.QUEUE_NAME)
    public void receive(String message) {
        log.info("接收到的消息：{}", message);
    }*/

    /**
     * 方式二：
     *  也可以使用 @RabbitListener 来创建交换机、队列和绑定
     *  注意：当使用 bindings 时，不需要再指定 queues 属性
     *
     *  如果是手动签收的模式，可以传入一个 Channel 参数，这个是 rabbitmq 客户端原生的 API 对象，使用这个对象来完成 ACK 的应答
    */
    /*@RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = RabbitConfig.QUEUE_NAME, durable = "false"),
            exchange = @Exchange(name = RabbitConfig.EXCHANGE_NAME, type = ExchangeTypes.DIRECT),
            key = RabbitConfig.ROUTING_KEY
    ))
    public void receive(String message, Channel channel, Map<String, Object> headers) throws IOException {
        log.info("接收到的消息：{}", message);
        // 当手动签收时，需要给 rabbitmq 回馈条消息，告诉 rabbitmq
        Long tag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
        // 执行 ACK 应答，第二个参数用于设置是否批量签收，true 表示批量签收
        channel.basicAck(tag, false);
    }*/
}
